# 闭包形式的装饰器

def send():
    print("Send message")

def transfer_money():
    print("Transfer money")


def outer(fn:callable): # fn形参, 往里面传的是被装饰的函数名
    def inner():
        print("Login")
        # 执行被装饰的函数
        fn()
    return inner

ot1 = outer(send)
ot1()

ot2 = outer(transfer_money)
ot2()

# 装饰器的原理就是将原来的函数当作闭包函数的外层实参传进去